package com.chenchao.thread;

/**
 * @encoding : UTF-8
 * @Time : 2020/11/16 13:36
 * @Author : Chen Chao
 * @File : javaSE.com.chenchao.javathread.Test1.java
 * @Software : IntelliJ IDEA
 * @since : 1.8
 * 之类化Thread类
 */
public class Test1 extends Thread{
    public static void main(String[] args) {
        //test01();
        //test02();
        //System.out.println(Thread.currentThread().getName());
        test03();
    }
    public static void test01(){
        Test1 test1 = new Test1();
        //设置线程名称
        test1.setName("线程1");

        //开始后并发执行
        test1.start();
        //主线程搞下面的，子线程run()方法
        for (int i = 0; i < 1000; i++) {
            //获取当前线程名称
            System.out.println(currentThread().getName()+i+"次");

        }
    }

    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            //获取当前线程名称，当前线程对象的线程名称（this也可以不写）
            System.out.println(currentThread().getName()+"run"+i+"次");
            System.out.println(this.getName()+"run"+i+"次");
        }
    }

    /**
     * 线程休眠
     */
    public static void test02(){
        for (int i = 0; i < 1000; i++) {
            if(i%5==0&&i!=0){
                try {
                    Thread.sleep(2000);
                    //休眠两秒，写在那个线程休眠那个线程
                } catch (InterruptedException e) {
                    e.printStackTrace();

                }
            }

            System.out.println(currentThread().getName()+i+"次");
        }
    }

    /**
     *run与start的区别
     */
    public static void test03(){
        Test1 test1 = new Test1();
        test1.run();
        //调用run不会创建多线程，直接把run方法入栈
        //test1.start();
        //调用strat会创建新线程，开新栈
        for (int i = 0; i < 1000; i++) {
            //获取当前线程名称
            System.out.println(currentThread().getName()+i+"次");

        }
    }
}
